滲透測試重新打底(2.1)--論Enumeration(枚舉)之DNS Enumeration


Posted by kahatrix on 2023-09-22

透過DNS的枚舉,我們想要得到什麼資料呢? 第一個可能我們會想知道說,它的DNS server的IP address,或者是說在DNS server,它的record 它的table裡面有沒有像是,比如說它內部的其他server的名稱,像是email server、web server、或者是一些IP address。

這邊以owasp.org這一個網站做舉例。我們可以利用像是host的這個工具來得到它的IP address。比如說我這邊按一個host,比如說像這樣子.org,我們可以看到output,它會告訴我說owasp.org它不只只有一個IP address。比如說它這邊列了非常多個IPv4以及IPv6的address。那這些IP都是public network的IP。下面也可以看到它有一些mail server,像這下面這邊它列了五個mail server,那這看起來它可能是透過Google的server幫它做handle的部分。

┌──(root㉿kali)-[~]
└─# host owasp.org
owasp.org has address 172.67.10.39
owasp.org has address 104.22.27.77
owasp.org has address 104.22.26.77
owasp.org has IPv6 address 2606:4700:10::ac43:a27
owasp.org has IPv6 address 2606:4700:10::6816:1b4d
owasp.org has IPv6 address 2606:4700:10::6816:1a4d
owasp.org mail is handled by 5 alt2.aspmx.l.google.com.
owasp.org mail is handled by 1 aspmx.l.google.com.
owasp.org mail is handled by 10 alt4.aspmx.l.google.com.
owasp.org mail is handled by 5 alt1.aspmx.l.google.com.
owasp.org mail is handled by 10 alt3.aspmx.l.google.com.

那只能夠透過domain name,像是剛剛的owasp.org這樣的domain name來尋找IP嗎?那我能夠反過來嗎? 那當然也是可以的。這邊再給一個例子。

除了剛剛的這種owasp.org之外,我們還能夠給像是,我們找一下像是google.com的DNS server,好,那Google它推出了自己的DNS server IP是8.8.8.8以及8.8.4.4,那我們來嘗試一下用這個反向的lookup,意思是說我們給定一個IP address,我們能看看是不是能夠找到我們的URL。

它的用法一樣是使用host這個binary,參數就直接是帶IP,就不是像剛剛的URL的部分。那這邊我們就給host 8.8.8.8,可以看到這個output出來。host這個工具幫我們找到了說它的domain name pointer其實是到DNS.google。

┌──(root㉿kali)-[~]
└─# host 8.8.8.8
8.8.8.8.in-addr.arpa domain name pointer dns.google.

通常在大多數情況下,這種逆reverse lookup不會成功,但是通常你做domain name,像剛剛這種URL的查看是可以成功的。

那接下來介紹DNS zone transfer。為什麼需要這個zone transfer?
那先來簡介一下什麼是zone transfer。在一個自己公司它的內網

那這邊我們就直接用一個Megacorp做一個範例

mail.megacorp.com
admin.megacorp.com
dev.megacorp.com

在自家的企業的內網會有自己內部的DNS server,它的目的是讓員工可以找到他所需要的內網的網站。比如說在這個Megacorp裡面,它可能會有Mail server,也可能會有Development server也有可能會有Admin server,它可能是不應該讓所有員工都知道的這種比較機密的server。那如果你有這個企業內部的DNS server,它同時也會有一台備用的DNS server。這一台備用的server目的,是主要的DNS server有問題的時候它隨時可以上線且可以支援。

一台主DNS server跟備用的server,它可能會有一個問題,就是需要做同步。因為如果是主要的DNS server,它的record、table會一直更新,但是備用的這一台DNS server它的東西都會是舊的,所以才會出現Zone Transfer這個概念、這個技術其實就是兩台DNS server在同步自己內部record的做法。

Zone Transfer它是走TCP的port 53。這個Zone Transfer它是可以更新主要是用來查詢DNS記錄,是一個相當強大的功能。如果我們站在攻擊者的角度,要怎麼樣去利用這一個概念?

接下來就來介紹怎麼樣去攻擊這個Zone Transfer。Hack the Box VIP有FriendZone這一台機器。如果我們剛剛提到的主DNS Server以及備用的DNS Server沒有設定好,導致任何人都可以查詢這一台主要DNS Server的紀錄。這是一件非常危險的事情,因為這等於算是曝光了自家企業內部所有的域名,這件事情也給了攻擊者一個很精確的目標。攻擊者不太需要再去做太多的Scanning,就可以直接知道說他的目標有哪些。

以下先掃描哪些port有開:

┌──(root㉿kali)-[~]
└─# nmap -p- -v 10.10.10.123
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-21 07:14 EDT
Initiating Ping Scan at 07:14
Scanning 10.10.10.123 [4 ports]
Completed Ping Scan at 07:14, 0.23s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 07:14
Completed Parallel DNS resolution of 1 host. at 07:14, 0.00s elapsed
Initiating SYN Stealth Scan at 07:14
Scanning 10.10.10.123 [65535 ports]
Discovered open port 443/tcp on 10.10.10.123
Discovered open port 445/tcp on 10.10.10.123
Discovered open port 53/tcp on 10.10.10.123
Discovered open port 80/tcp on 10.10.10.123
Discovered open port 139/tcp on 10.10.10.123
Discovered open port 22/tcp on 10.10.10.123
Discovered open port 21/tcp on 10.10.10.123

詳細掃開啟的port:

┌──(root㉿kali)-[~]
└─# nmap -p21,22,53,80,139,443,445 -sC -sV -O -A  10.10.10.123
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-21 07:25 EDT
Nmap scan report for 10.10.10.123
Host is up (0.41s latency).

PORT    STATE SERVICE     VERSION
21/tcp  open  ftp         vsftpd 3.0.3
22/tcp  open  ssh         OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 a96824bc971f1e54a58045e74cd9aaa0 (RSA)
|   256 e5440146ee7abb7ce91acb14999e2b8e (ECDSA)
|_  256 004e1a4f33e8a0de86a6e42a5f84612b (ED25519)
53/tcp  open  domain      ISC BIND 9.11.3-1ubuntu1.2 (Ubuntu Linux)
| dns-nsid:
|_  bind.version: 9.11.3-1ubuntu1.2-Ubuntu
80/tcp  open  http        Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Friend Zone Escape software
|_http-server-header: Apache/2.4.29 (Ubuntu)
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
443/tcp open  ssl/http    Apache httpd 2.4.29
|_http-title: 404 Not Found
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=friendzone.red/organizationName=CODERED/stateOrProvinceName=CODERED/countryName=JO
| Not valid before: 2018-10-05T21:02:30
|_Not valid after:  2018-11-04T21:02:30
| tls-alpn:
|_  http/1.1
|_http-server-header: Apache/2.4.29 (Ubuntu)
445/tcp open  netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 3.2 - 4.9 (95%), Linux 3.16 (95%), Linux 3.18 (95%), ASUS RT-N56U WAP (Linux 3.4) (95%), Linux 3.1 (93%), Linux 3.2 (93%), Linux 3.10 - 4.11 (93%), Oracle VM Server 3.4.2 (Linux 4.1) (93%), Linux 3.12 (93%), Linux 3.13 (93%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: Hosts: FRIENDZONE, 127.0.1.1; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: -1h00m00s, deviation: 1h43m54s, median: -1s
| smb2-time:
|   date: 2023-06-21T11:25:51
|_  start_date: N/A
| smb2-security-mode:
|   311:
|_    Message signing enabled but not required
|_nbstat: NetBIOS name: FRIENDZONE, NetBIOS user: <unknown>, NetBIOS MAC: 000000000000 (Xerox)
| smb-security-mode:
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb-os-discovery:
|   OS: Windows 6.1 (Samba 4.7.6-Ubuntu)
|   Computer name: friendzone
|   NetBIOS computer name: FRIENDZONE\x00
|   Domain name: \x00
|   FQDN: friendzone
|_  System time: 2023-06-21T14:25:51+03:00

TRACEROUTE (using port 445/tcp)
HOP RTT       ADDRESS
1   452.35 ms 10.10.16.1
2   205.27 ms 10.10.10.123

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 50.03 seconds

掃出來的結果可以看出它這邊Port 53是有開的。通常你如果TCP 53有開,那UDP 53也是會開的。所以可以看到在TCP 53這邊解析出來是有DNS的部分(dns-nsid)。

接下來我們來攻擊一下這個DNS Zone Transfer。它的指令是這樣子下的:dig然後配上axfr,再接下來你要輸入目標的Domain Name。這邊跳過找出Domain Name的步驟(其實在剛剛詳細掃描的commonName有)。那在這邊指令可以像這樣子下:

┌──(root㉿kali)-[~]
└─# dig axfr friendzone.red @10.10.10.123

; <<>> DiG 9.18.12-1-Debian <<>> axfr friendzone.red @10.10.10.123
;; global options: +cmd
friendzone.red.         604800  IN      SOA     localhost. root.localhost. 2 604800 86400 2419200 604800
friendzone.red.         604800  IN      AAAA    ::1
friendzone.red.         604800  IN      NS      localhost.
friendzone.red.         604800  IN      A       127.0.0.1
administrator1.friendzone.red. 604800 IN A      127.0.0.1
hr.friendzone.red.      604800  IN      A       127.0.0.1
uploads.friendzone.red. 604800  IN      A       127.0.0.1
friendzone.red.         604800  IN      SOA     localhost. root.localhost. 2 604800 86400 2419200 604800
;; Query time: 2480 msec
;; SERVER: 10.10.10.123#53(10.10.10.123) (TCP)
;; WHEN: Wed Jun 21 07:53:26 EDT 2023
;; XFR size: 8 records (messages 1, bytes 289)

揭露出administrator1.friendzone.red、hr.friendzone.red、uploads.friendzone.red。

好,那有人可能會問說那我知道這些,可是我又連不到,我又不知道IP是什麼,那這也是我們接下來下一步要做的事情。

┌──(root㉿kali)-[~]
└─# cat /etc/hosts
127.0.0.1       localhost
127.0.1.1       kali
172.16.1.153    hr.itop.com.tw
172.16.1.134    market.itop.com.tw
172.16.1.134    sales.itop.com.tw
172.16.1.222    wpress.itop.com.tw

#HTB Friendzone
10.10.10.123 friendzone.red administrator1.friendzone.red hr.friendzone.red uploads.friendzone.red

::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

簡單來說,就是要在/etc/hosts這個文件內新增剛剛找到的別的網域。在HTB Friendzone這一行可以看到怎麼新增的。

那Nmap可能也是整個做PT相當重要的一個工具,我們常常會使用Nmap來確認說目標有哪些port有開。可能在說我一拿到我的IP address之後,第一件事情通常就是打開Nmap這也的確是在考OSCP的時候,最常見也最快速的一個做法。

使用Nmap的目的在於了解你的目標,比如說哪些port是打開的,以及說這些port所對應的service是什麼。那使用Nmap這樣的工具,可以快速的讓我們對目標有一個大方向的了解Nmap這個工具它支援的功能非常非常多,那我們主要是趕快用Nmap了解目標,並且做更深的滲透測試。

有幾件事情我們希望透過Nmap來了解一下。第一個是剛剛提到的port number哪些有開,第二個如果它是service的話,我們可以透過Nmap來查看說它的版本;第三個我們要看的是我們目標的OS。

Nmap最簡單的用法就是直接Nmap,然後給出你的target IP或者是URL。那如果說你今天比較懶惰一點的話,你可以直接帶-a,-a的option,基本上就是自動幫你做一些掃描,然後帶T4這個option以及-p-。這個-p-它是會幫助你掃描從port 1到65535,也就是所有的port,這邊都是針對TCP的部分。

如果想要掃描的詳細一點的話,我們可以使用比如說像是-sV,我們可以來看看說它的service,或者是它的可能版本的number;以及-sc,這個option的意思是script scan,也就是使用Nmap的nse這個script來做default scan。我們也可以使用-oa這個option,這個option是我們可以把掃描的結果,透過像是GNmap、Nmap以及XML這三種格式來做output。

Nmap當然也可以針對你所想要的port做掃描

# -sV : Probe open ports to determine service/version info
# -sC : equivalent to --script=default (script scan)
# -oA : output as gnmap/nmap/xml format
# TARGET_IP : 10.10.10.123
# -p  : port number

$ nmap -sC -sV -p 21, 80, 139, 445 -oA nmap/report TARGET_IP

...
Not shown: 993 closed ports
PORT    STATE SERVICE     VERSION
21/tcp  open  ftp         vsftpd 3.0.3
....
445/tcp open  netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
Service Info: Hosts: FRIENDZONE, 127.0.1.1; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: -59m59s, deviation: 1h43m54s, median: 0s
|_nbstat: NetBIOS name: FRIENDZONE, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-os-discovery: 
....

$ ls nmap/
report.gnmap  report.nmap  report.xml

這邊提供一些簡單的思路。第一個我們可以檢查service的版本是不是沒有更新,是不是存在已知的漏洞;第二個,像是port 80, port 443, port 8000、8080或者是8443,它可能是web service。那port 80是http,port 8000跟8080可能都是http,但是port 443以及8443有可能是https。那再來port 139, port 445,如果看到這兩個port有打開的話,可能是SMB的服務。我們可以做更深的SMB的enumeration。

來看個指令並解釋一下:

nmap -sC -sV -A -T4 -v TARGET_IP -oN init.nmap

在OSCP的這種考試,因為它考試的時間有限,所以可以先將常用的port來掃描一遍,這邊就是使用了-a, -sv來列舉service,sc是nmap的nsc script。t4它比較適合用在網路狀況非常好的情況。如果說它沒有IDS或沒有IPS的話是可以使用t4的。如果是t3的話速度會比較慢一點。再來是如果你可以用-v的話,它就是說當掃描到port的時候就先趕快print出來,可以趕快的去做更深的enumeration,而不是說等它全部掃完,再一次性的給你看完整的結果。

再來就是-on,能夠直接讓你變成一個file,其實也都是txt檔案,然後可以直接把它輸出,讓你比較方便查看。可能不需要像剛剛的-oa,-oa是有三個不同的檔案類型,其實可能不太需要。

有可能有些人會問說為什麼我們要執行os scan,那原因是在於,比如說windows server,它提供的web service通常是not case sensitive,就是不會去區分大寫小寫。那如果說我們在針對web service的話,我們未來可能會用gobuster這樣的工具去做目錄的枚舉,我們這個時候可以選擇不分大小寫的字典檔來加速枚舉。

example: Windows系統會將下面兩個link視為一樣的
http://10.10.10.10/NotSensitive
http://10.10.10.10/notsensitive

Nmap提供了script做掃描,它的格式是這樣的:

nmap -p 445 --script smb-vuln-ms17-010 TARGET_IP

如果你給了這個--script的話,就不需要再給剛剛的--sc。那這一個--script要帶的參數,上面的例子是ms17-010。

這個地方提供一個小技巧。這個smb script的掃描,可以搭配wirecard做使用,來呼叫所有,比如說這邊我是呼叫所有snb-vuln所有漏洞的ns script。

nmap -p 445 --script smb-vuln-* 10.10.10.123

那這邊做一個簡單的demo,比如說log4j然後找nmap,其實可以很簡單的就看到這邊有針對log4j這一個漏洞所推出的nmap script。那這一個script只要把它下載下來放到剛剛的那個folder裡面就可以用了。

放的位置

  • for *nix system it might be ~/.nmap/scripts/ or $NMAPDIR

指令示範:

nmap --script log4shell.nse --script-args log4shell.callback-server=172.17.42.1:1389 -p 8080 172.17.42.2

接下來要提的是,針對Web所做的一些Enumeration,會介紹一些針對Web Server可以使用的工具。第一個我們要用的是Web App Analyzer

Wappalyzer

這一個工具它可以幫你分析說你的目標它是使用什麼Programming Language來撰寫,當然也可以尋找使用特定語言寫的網站。比如說對PHP或是JavaScript特別感興趣,也可以在這上面做尋找。它並不是在OSCP上面,當然比較不使用,就是跟大家說有這樣的一個工具,大家可以去參考。

第二個我們要介紹的工具是Nikto。它是一個Web Server的掃描器,它會提供許多網站的資料,它自己也有自帶一些漏洞搜尋的引擎,所以它也是一個可以幫助你找到漏洞的工具。但是因為這個Nikto執行速度比較慢一點,所以如果Nmap Scan有掃描到網站的話,會建議趕快跑這個Nikto,不然它會掃得很久。

這個地方你在掃描的時候,如果你遇到了像剛剛所提到的Zone Transfer這樣的事情,或者是說它會來看你HTTP header中Host的header,它可能會要你認定是它所特別允許的字樣,它才會給你一種網站。如果你只是單純打IP的話,可能會把你Redirect到不同的網站,可能是一些Default網站,所以這個地方要特別注意。不管是你未來在做Enumeration,或者是使用Nikto這樣的工具的時候,如果有存在它有注意Domain Name的時候,一定要把你已知的Domain Name打到你的/etc/hosts裡面。

Nikto能掃到的東西比較沒有這麼的多,所以當然掃還是要掃,但建議不要太依賴這個工具所產出的Output,如果能手動去做Enumeration是最好的。

接下來要講的工具是GoBuster。好,那假設今天已經知道目標網站有HTTP Server,那下一步如果沒有找到它的一些有趣的資料,也沒有找到什麼登入介面,那這個時候想要暴力的找出它所有可能存在的網頁或是目錄(像是Image的目錄、檔案的目錄),或者是有什麼樣的隱藏的文件,那這個時候我們可以使用GoBuster這樣的網頁暴力掃描工具。

這邊要注意,就是GoBuster它速度非常快,然後它也吃這個字典檔,這個字典檔要稍微慎選一下。比如說像是剛剛的針對Windows系統,我們已知它大小寫不敏感,那這個時候就可以使用都是Lowercase的字典檔。

在Kali Linux有提供一些字典檔,可以從這個/usr/share/dirbuster來找到。那針對字典檔的部分,推薦一個叫SecLists。它提供了非常非常豐富的字典檔,不只針對Web Server所做Enumeration的部分,也會針對像是Password來提供各式各樣的字典檔。

那這邊它也會有提供很多不同的,針對比如像是Drupal、Joomla或是Wordpress所設計出來的字典檔,大家未來在Lab或者是考試中如果有遇到也可以去做使用。

接下來回到GoBuster。在使用GoBuster的時候,必須要先了解你的目標有可能存在怎麼樣的extension(副檔名)。比如Linux,可以嘗試看看PHP、HTML或者是Config;如果是Windows,可能要注意一下你可能會出現aspx這種針對Windows Server所推出的Web伺服器。

如果你的Extension你設的不好,設的太多的話,掃描速度會慢許多。首先可以看這個GoBuster,這個Directory掃描的Mode,然後帶一組URL,之後要帶我們的WordList(字典檔),個人的喜好會使用這個DirBuster裡面所提供的list-2.3-median.txt,因為它的算是掃描的速度夠快,然後也還算是夠詳細。那當然如果掃描不出來的話,也可以使用更大的檔案,更完善的字典檔去做掃描。

那如果說今天一不小心在terminal貼上了東西,你游標要到最前面的時候,你可以按Ctrl+A。那如果你今天在最前面,想要到最後面怎麼辦,可以按Ctrl+E。

gobuster dir -k -x php -u https://friendzone.red/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html

GoBuster它也支援了可以濾掉不要的HTTP return code。比如說我不要404,或者是不要30多的這種redirect的部分。可以用把它pipe,然後做grep -v 301。

gobuster dir -k -x php -u [https://friendzone.red/](https://friendzone.red/) -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html | grep -v 301

想要加速的話可以用-t這個option,可以在-w前面加個-t 30,代表30個thread。

list-2.3-median絕大多數的結果都可以掃描出來,那如果一些比較特別的情況下,比如說它的題目就是故意要考你一些它隱藏的word list,那可能要用比較大的word list去掃,才能掃得出來。










Related Posts

Auto Generate Insert Script without SQL Manager

Auto Generate Insert Script without SQL Manager

滲透測試基本技術 第三章 (005)

滲透測試基本技術 第三章 (005)

Node.appendChild() vs. Element.append()

Node.appendChild() vs. Element.append()


Comments